在PHP中,我可以在模型中设置属性(不是数据库中的列).例如(PHP代码),
$user = new User; $user->flag = true;
但是在rails中,当我设置数据库中不存在的任何属性时,它将抛出错误undefined method flag
.有attr_accessor
方法,但如果我需要大约10个临时属性会发生什么?
但如果我需要大约十个临时属性会发生什么?
#app/models/user.rb class User < ActiveRecord::Base attr_accessor :flag, :other_attribute, :other_attribute2, :etc... end
attr_accessor
在Rails中创建"虚拟"属性 - 它们不存在于数据库中,但存在于模型中.
与db中的属性一样,attr_accessor
只需在类中创建一组setter
&getter
(实例)方法,您可以在初始化类时调用和交互:
#app/models/user.rb class User < ActiveRecord::Base attr_accessor :flag # getter def flag @flag end # setter def flag=(val) @flag = val end end
这是可以预期的,因为这是ActiveRecord的设计原理。如果需要设置任意属性,则必须使用另一种对象。
例如,Ruby提供了一个名为的库OpenStruct
,该库允许您创建对象,您可以在其中分配任意键/值。您可能希望使用此类库,然后仅在/需要将其保存到数据库时才将对象转换为相应的ActiveRecord实例。
不要尝试ActiveRecord
按照您刚才描述的那样进行建模,因为它根本不是设计成以这种方式进行行为。根据您当前的PHP知识,这将是一种货物培养错误。